package com.aura.springbook.service;

import com.aura.springbook.model.User;
import com.baomidou.mybatisplus.extension.service.IService;

/**
 * 用户服务接口
 * <p>
 * 继承MyBatis-Plus的IService，提供基本的CRUD操作
 * 同时定义了一些自定义的业务方法
 * <p>
 * 提供以下功能：
 * 1. 基本的增删改查操作（继承自IService）
 * 2. 用户注册
 * 3. 用户登录
 * 4. 根据ID查询用户信息
 * 5. 更新用户信息
 * 6. 检查用户名是否存在
 * 7. 修改用户密码
 */
public interface UserService extends IService<User> {

    /**
     * 用户注册
     * <p>
     * 注册新用户，检查用户名是否已存在，对密码进行加密存储
     *
     * @param user 用户信息
     * @return 注册成功的用户ID
     */
    Long register(User user);

    /**
     * 用户登录
     * <p>
     * 验证用户名和密码，返回登录成功的用户信息
     *
     * @param username 用户名
     * @param password 密码
     * @return 登录成功的用户信息
     */
    User login(String username, String password);

    /**
     * 根据ID查询用户信息
     * <p>
     * 根据用户ID查询用户详细信息
     *
     * @param id 用户ID
     * @return 用户信息
     */
    User getUserById(Long id);

    /**
     * 更新用户信息
     * <p>
     * 更新用户的个人信息（真实姓名、联系电话等）
     *
     * @param id   用户ID
     * @param user 更新的用户信息
     * @return 是否更新成功
     */
    boolean updateUserInfo(Long id, User user);

    /**
     * 检查用户名是否存在
     * <p>
     * 检查指定用户名是否已被其他用户使用
     *
     * @param username 用户名
     * @return 是否存在
     */
    boolean isUsernameExists(String username);

    /**
     * 修改用户密码
     * <p>
     * 修改用户登录密码，新密码不能与旧密码相同
     *
     * @param id          用户ID
     * @param newPassword 新密码
     * @return 是否修改成功，如果新密码与旧密码相同则返回false
     */
    boolean changePassword(Long id, String newPassword);
}